<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<!--
			1.在函数的内部有两个特殊的对象，一个是arguments，另外一个是this
			2.
		-->
		<script>
			 function factorial(num){
			 	if(num<=1){
			 		return 1;
			 	}else{
			 		console.info(num);
			 		return num*factorial(num-1);
			 	}
			 }
			 console.info(factorial(10));
			 //如上，定义阶乘函数的时候一般要用到递归算法，如上面的代码中，在函数有名字而且名义不会变的情况下，这样定义是没有问
			 //题的，但是函数的执行和函数名紧紧耦合在一起，为了消除这种紧密耦合的现象，可以用arguments.callee
			//arguments的主要作用就是保存函数参数，但是这个对象有一个callee的属性，该属性是一个指针，指向arguments对象
			//的函数
			function factorial2(num){
			 	if(num<=1){
			 		return 1;
			 	}else{
			 		console.info(num);
			 		return num*arguments.callee(num-1);
			 	}
			 }
			  console.info(factorial2(10));

		</script>
	</body>
</html>
